package com.yonyou.pmclouds.plan.rmiitf;

import com.yonyou.pmclouds.basecom.exception.BusinessException;
import com.yonyou.pmclouds.plan.entity.ProjectScheduleBoardVO;
import com.yonyou.pmclouds.plan.entity.ScheduleVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *
 * @Description: 计划查询类
 * @Author: zhangzhonghao
 * @Date: 2020-03-06
 *
 */
public interface IScheduleQueryService {

    /**
     * 查询该项目下的所有生效的计划数量
     * @param pkProject 项目主键
     * @return 计划数量
     */
    int queryCountByPkProject(String pkProject) throws BusinessException;

    /**
     * 通过计划编制主键查询计划编制数据
     * @param pkSchedule 计划编制主键
     * @return 计划编制VO
     */
    ScheduleVO queryById(String pkSchedule) throws BusinessException;

    /**
     * 通过项目主键查询所有生效的计划编制数据
     * @param pkProject 项目主键
     * @return 计划编制数据数组
     */
    List<ScheduleVO> queryByPkProject(String pkProject) throws BusinessException;

    /**
     * 通过计划主键批量查询计划编制数据
     * @param pkSchedules 计划编制主键数组
     * @return 计划编制数据数组
     */
    List<ScheduleVO> queryByIds(String[] pkSchedules) throws BusinessException;

    /**
     * 根据租户查询所有生效的计划
     * @param tenantId 租户主键
     * @return 计划编制数组
     */
    List<ScheduleVO> queryByTenantId(String tenantId) throws BusinessException;

    /**
     * 项目计划看板查询
     * @param tenantId 租户主键
     * @param filterCode 标签页编码：进行中（ongoing）、已完成（completed）、全部（all）
     * @param sortField 排序字段
     * @param sortWay 排序方式
     * @param orgId 组织主键
     * @return 该项目下的计划
     */
    List<ProjectScheduleBoardVO> queryProjectScheduleBoard(String tenantId, String filterCode, String sortField,
                                                           String sortWay, String orgId) throws BusinessException;

    /**
     * 根据起止日期过滤
     */
    ScheduleVO[] queryByIdsAndProjectId(String[] projectId, String[] ids, Date startDate, Date endDate) throws BusinessException;

    /**
     * 根据项目获取根计划
     */
    List<ScheduleVO> queryByProjectId(String pkProject) throws BusinessException;

    /**
     * 根据pk_original查询所有版本的子计划
     * @param pkOriginal
     * @return
     */
    ScheduleVO[]  queryByPkOriginal(String pkOriginal) throws BusinessException;

    /**
     * 通过主键和版本号获取上一个版本的id
     * @param pkSchedule
     * @return
     */
    String findByPreId(String pkSchedule,int version);

    Map<String,List<ScheduleVO>> queryByProjectIds(String[] projectIds);


}
